﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using Fuyao.Business.Entities.Models;
using System.Data.Common;
using System.Xml.Linq;

namespace Fuyao.Data.SQLServer.DAO
{
    public class DAOVenta
    {
        string strCnx = clsConexionDB.getConexionSQL();

        private string getItemLinqXML_InsertDetalleVenta(ICollection<DetalleVenta> listDetalleVenta)
        {
            var xEle = new XElement("ITEMS",//raiz
                            from item in listDetalleVenta
                            select new XElement("ITEM",//nodo
                                   new XAttribute("ProductoID", item.ProductoID),
                                   new XAttribute("Cantidad", item.Cantidad),
                                   new XAttribute("PrecioUnitario", item.PrecioUnitario), 
                                   item.Descuento == null ? null :  new XAttribute("Descuento", item.Descuento)
                                   )); //atributos                                  
            return xEle.ToString();
        }

        public bool validarNroDocumento(Venta oVenta)
        {
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);
            bool result = false;
            try
            {
                strCommand.Append("FYAO_ValidateExintingOrderNumber");
                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.StoredProcedure;

                sqlCommand.Parameters.Add("@Tipo", SqlDbType.VarChar).Value = oVenta.TipoVenta;
                sqlCommand.Parameters.Add("@NroDocumento", SqlDbType.Int).Value = oVenta.NroVenta;

                cnx.Open();
                if (Convert.ToInt32(sqlCommand.ExecuteScalar()) > 0)
                    result = true;
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return result;
        }

        public bool insertarVenta(Venta oVenta)
        {
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);
            bool result = false;
            try
            {
                strCommand.Append("FYAO_InsertVenta");
                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.StoredProcedure;

                sqlCommand.Parameters.Add("@ClienteID", SqlDbType.Int).Value = oVenta.ClienteID;
                sqlCommand.Parameters.Add("@MontoTotal", SqlDbType.Decimal).Value = oVenta.MontoTotal;
                sqlCommand.Parameters.Add("@TipoVenta", SqlDbType.VarChar).Value = oVenta.TipoVenta;
                sqlCommand.Parameters.Add("@TipoMoneda", SqlDbType.Int).Value = oVenta.TipoMoneda;
                sqlCommand.Parameters.Add("@Descuento", SqlDbType.Decimal).Value = oVenta.Descuento;
                sqlCommand.Parameters.Add("@VendedorID", SqlDbType.Int).Value = oVenta.VendedorID;
                sqlCommand.Parameters.Add("@PedidoID", SqlDbType.Int).Value = oVenta.PedidoID;
                sqlCommand.Parameters.Add("@Estado", SqlDbType.Int).Value = oVenta.Estado;
                sqlCommand.Parameters.Add("@FormaPago", SqlDbType.Int).Value = oVenta.FormaPago;
                sqlCommand.Parameters.Add("@GuiaRemisionID", SqlDbType.Int).Value = oVenta.GuiaRemisionID;
                sqlCommand.Parameters.Add("@IGV", SqlDbType.Decimal).Value = oVenta.IGV;
                sqlCommand.Parameters.Add("@Serie", SqlDbType.VarChar).Value = oVenta.Serie;
                sqlCommand.Parameters.Add("@FechaPago", SqlDbType.DateTime).Value = oVenta.FechaPago;
                sqlCommand.Parameters.Add("@CreadoPor", SqlDbType.Int).Value = oVenta.CreadoPor;
                sqlCommand.Parameters.Add("@NroVenta", SqlDbType.VarChar).Value = oVenta.NroVenta;
                sqlCommand.Parameters.Add("@Observaciones", SqlDbType.VarChar).Value = oVenta.Observaciones;
                sqlCommand.Parameters.Add("@XML", SqlDbType.Xml).Value = getItemLinqXML_InsertDetalleVenta(oVenta.DetalleVentas);

                cnx.Open();
                if (sqlCommand.ExecuteNonQuery() > 0)
                    result = true;
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return result;
        }

        public bool updateVenta(Venta oVenta)
        {
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);
            bool result = false;
            try
            {
                strCommand.Append("FYAO_UpdateVenta");
                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.StoredProcedure;

                sqlCommand.Parameters.Add("@VentaID", SqlDbType.Int).Value = oVenta.VentaID;
                sqlCommand.Parameters.Add("@ClienteID", SqlDbType.Int).Value = oVenta.ClienteID;
                sqlCommand.Parameters.Add("@MontoTotal", SqlDbType.Decimal).Value = oVenta.MontoTotal;
                sqlCommand.Parameters.Add("@TipoVenta", SqlDbType.VarChar).Value = oVenta.TipoVenta;
                sqlCommand.Parameters.Add("@TipoMoneda", SqlDbType.Int).Value = oVenta.TipoMoneda;
                sqlCommand.Parameters.Add("@Descuento", SqlDbType.Decimal).Value = oVenta.Descuento;
                sqlCommand.Parameters.Add("@VendedorID", SqlDbType.Int).Value = oVenta.VendedorID;
                sqlCommand.Parameters.Add("@PedidoID", SqlDbType.Int).Value = oVenta.PedidoID;
                sqlCommand.Parameters.Add("@Estado", SqlDbType.Int).Value = oVenta.Estado;
                sqlCommand.Parameters.Add("@FormaPago", SqlDbType.Int).Value = oVenta.FormaPago;
                sqlCommand.Parameters.Add("@GuiaRemisionID", SqlDbType.Int).Value = oVenta.GuiaRemisionID;
                sqlCommand.Parameters.Add("@IGV", SqlDbType.Decimal).Value = oVenta.IGV;
                sqlCommand.Parameters.Add("@Serie", SqlDbType.VarChar).Value = oVenta.Serie;
                sqlCommand.Parameters.Add("@FechaPago", SqlDbType.DateTime).Value = oVenta.FechaPago;
                sqlCommand.Parameters.Add("@ModificadoPor", SqlDbType.Int).Value = oVenta.CreadoPor;
                sqlCommand.Parameters.Add("@NroVenta", SqlDbType.VarChar).Value = oVenta.NroVenta;
                sqlCommand.Parameters.Add("@Observaciones", SqlDbType.VarChar).Value = oVenta.Observaciones;
                sqlCommand.Parameters.Add("@XML", SqlDbType.Xml).Value = getItemLinqXML_InsertDetalleVenta(oVenta.DetalleVentas);

                cnx.Open();
                if (sqlCommand.ExecuteNonQuery() > 0)
                    result = true;
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return result;
        }

        public List<Venta> getVentaByFilter(Venta oVentaFilter)
        {
            Venta oVenta = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);
            List<Venta> listVenta = new List<Venta>();

            try
            {
                strCommand.Append("SELECT VentaID,NroVenta,right('000000' + cast(NroVenta as varchar(6)), 6) NroVentaDesc,NombreCliente,v.FechaCreacion,case when v.TipoVenta='F' then 'FACTURA' when v.TipoVenta='B' then 'BOLETA' else '' end TipoVentaDesc,Descuento,MontoTotal, p.Nombre as EstadoDesc ");
                strCommand.Append("FROM Venta v ");
                strCommand.Append("INNER JOIN Cliente c on c.ClienteID = v.ClienteID ");
                strCommand.Append("INNER JOIN Parametro p on p.Valor= v.Estado AND p.TableName = @TableName ");
                strCommand.Append("WHERE ");
                strCommand.Append("(UPPER(NroVenta) LIKE '%'+ UPPER(@NroVenta) + '%' OR  @NroVenta='') AND ");
                strCommand.Append("(UPPER(NombreCliente) LIKE '%'+ UPPER(@FiltroCliente) + '%' OR  @FiltroCliente='') AND ");
                strCommand.Append("v.Estado = @Estado ");

                if (oVentaFilter.FechaCreacion != null)
                    strCommand.Append("AND DATEDIFF(DAY , v.[FechaCreacion] , @FechaCreacion ) <= 0 ");

                if (oVentaFilter.FiltroFechaCreacionTO != null)
                    strCommand.Append("AND DATEDIFF(DAY , v.[FechaCreacion] , @FiltroFechaCreacionTO ) >= 0 ");

                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.Text;

                sqlCommand.Parameters.AddWithValue("@TableName", DbType.String).Value = "FACTURA";
                sqlCommand.Parameters.AddWithValue("@NroVenta", DbType.Int32).Value = oVentaFilter.NroVenta;
                sqlCommand.Parameters.AddWithValue("@FechaCreacion", DbType.String).Value = oVentaFilter.FechaCreacion;
                sqlCommand.Parameters.AddWithValue("@FiltroFechaCreacionTO", DbType.String).Value = oVentaFilter.FiltroFechaCreacionTO;
                sqlCommand.Parameters.AddWithValue("@Estado", DbType.String).Value = oVentaFilter.Estado;
                sqlCommand.Parameters.AddWithValue("@FiltroCliente", DbType.String).Value = oVentaFilter.FiltroCliente;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                while (dr.Read())
                {
                    oVenta = new Venta();

                    if (!Convert.IsDBNull(dr["VentaID"])) oVenta.VentaID = Convert.ToInt32(dr["VentaID"]);
                    if (!Convert.IsDBNull(dr["NroVentaDesc"])) oVenta.NroVentaDesc = Convert.ToString(dr["NroVentaDesc"]);
                    if (!Convert.IsDBNull(dr["NroVenta"])) oVenta.NroVenta = Convert.ToInt32(dr["NroVenta"]);
                    if (!Convert.IsDBNull(dr["NombreCliente"])) oVenta.FiltroCliente = Convert.ToString(dr["NombreCliente"]);
                    if (!Convert.IsDBNull(dr["FechaCreacion"])) oVenta.FechaCreacion = Convert.ToDateTime(dr["FechaCreacion"]);
                    if (!Convert.IsDBNull(dr["TipoVentaDesc"])) oVenta.TipoVentaDesc = Convert.ToString(dr["TipoVentaDesc"]);
                    if (!Convert.IsDBNull(dr["Descuento"])) oVenta.Descuento = Convert.ToDecimal(dr["Descuento"]);
                    if (!Convert.IsDBNull(dr["MontoTotal"])) oVenta.MontoTotal = Convert.ToDecimal(dr["MontoTotal"]);
                    if (!Convert.IsDBNull(dr["EstadoDesc"])) oVenta.EstadoDesc = Convert.ToString(dr["EstadoDesc"]);
                    listVenta.Add(oVenta);
                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return listVenta;
        }

        public Venta getVentaByID(int? ventaID)
        {
            Venta oVenta = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);

            try
            {
                strCommand.Append("SELECT v.VentaID,v.ClienteID,v.MontoTotal,v.TipoVenta,v.Descuento,v.VendedorID,v.Estado,v.FormaPago, v.PedidoID, v.GuiaRemisionID,v.IGV,v.Serie,v.FechaPago, ");
                strCommand.Append("v.FechaCreacion,v.FechaModificacion,v.CreadoPor,v.ModificadoPor,v.NroVenta,v.Observaciones,v.ModificadoPor,v.TipoMoneda, ");
                strCommand.Append("u.Nombre , u. ApellidoPaterno, c.NombreCliente, Dir.Direccion, c.RUC ,c.DNI, ped.NroPedido, g.NroGuiaRemision ");
                strCommand.Append("FROM Venta v ");
                strCommand.Append("INNER JOIN Cliente c on c.ClienteID = v.ClienteID ");
                strCommand.Append("INNER JOIN Usuario u on u.UsuarioID = v.CreadoPor ");
                strCommand.Append("INNER JOIN Direccion Dir on (c.ClienteID=Dir.ClienteID and Dir.EsPrincipal=1)");
                //strCommand.Append("INNER JOIN Parametro p on p.Valor= v.Estado AND p.TableName = @TableName ");
                strCommand.Append("INNER JOIN Pedido ped on ped.PedidoID = v.PedidoID ");
                strCommand.Append("LEFT JOIN  GuiaRemision g on g.GuiaRemisionID = v.GuiaRemisionID ");
                strCommand.Append("WHERE v.VentaID = @ventaID ");

                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.Text;

                //sqlCommand.Parameters.AddWithValue("@TableName", DbType.String).Value = "FACTURA";
                sqlCommand.Parameters.AddWithValue("@ventaID", DbType.Int32).Value = ventaID;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                if (dr.Read())
                {
                    oVenta = new Venta();
                    oVenta.Cliente = new Cliente();
                    oVenta.Usuario = new Usuario();
                    oVenta.Pedido = new Pedido();
                    oVenta.GuiaRemision = new GuiaRemision();

                    if (!Convert.IsDBNull(dr["VentaID"])) oVenta.VentaID = Convert.ToInt32(dr["VentaID"]);
                    if (!Convert.IsDBNull(dr["ClienteID"])) oVenta.ClienteID = Convert.ToInt32(dr["ClienteID"]);
                    if (!Convert.IsDBNull(dr["MontoTotal"])) oVenta.MontoTotal = Convert.ToDecimal(dr["MontoTotal"]);
                    if (!Convert.IsDBNull(dr["TipoVenta"])) oVenta.TipoVenta = Convert.ToString(dr["TipoVenta"]);
                    if (!Convert.IsDBNull(dr["Descuento"])) oVenta.Descuento = Convert.ToDecimal(dr["Descuento"]);
                    if (!Convert.IsDBNull(dr["VendedorID"])) oVenta.VendedorID = Convert.ToInt32(dr["VendedorID"]);
                    if (!Convert.IsDBNull(dr["Estado"])) oVenta.Estado = Convert.ToInt32(dr["Estado"]);
                    if (!Convert.IsDBNull(dr["FormaPago"])) oVenta.FormaPago = Convert.ToInt32(dr["FormaPago"]);
                    if (!Convert.IsDBNull(dr["GuiaRemisionID"])) oVenta.GuiaRemisionID = Convert.ToInt32(dr["GuiaRemisionID"]);
                    if (!Convert.IsDBNull(dr["IGV"])) oVenta.IGV = Convert.ToDecimal(dr["IGV"]);
                    if (!Convert.IsDBNull(dr["Serie"])) oVenta.Serie = Convert.ToString(dr["Serie"]);
                    if (!Convert.IsDBNull(dr["FechaPago"])) oVenta.FechaPago = Convert.ToDateTime(dr["FechaPago"]);
                    if (!Convert.IsDBNull(dr["FechaCreacion"])) oVenta.FechaCreacion = Convert.ToDateTime(dr["FechaCreacion"]);
                    if (!Convert.IsDBNull(dr["FechaModificacion"])) oVenta.FechaModificacion = Convert.ToDateTime(dr["FechaModificacion"]);
                    if (!Convert.IsDBNull(dr["CreadoPor"])) oVenta.CreadoPor = Convert.ToInt32(dr["CreadoPor"]);
                    if (!Convert.IsDBNull(dr["ModificadoPor"])) oVenta.ModificadoPor = Convert.ToInt32(dr["ModificadoPor"]);
                    if (!Convert.IsDBNull(dr["NroVenta"])) oVenta.NroVenta = Convert.ToInt32(dr["NroVenta"]);
                    if (!Convert.IsDBNull(dr["Observaciones"])) oVenta.Observaciones = Convert.ToString(dr["Observaciones"]);
                    if (!Convert.IsDBNull(dr["ModificadoPor"])) oVenta.ModificadoPor = Convert.ToInt32(dr["ModificadoPor"]);
                    if (!Convert.IsDBNull(dr["TipoMoneda"])) oVenta.TipoMoneda = Convert.ToInt32(dr["TipoMoneda"]);
                    if (!Convert.IsDBNull(dr["PedidoID"])) oVenta.PedidoID = Convert.ToInt32(dr["PedidoID"]);

                    if (!Convert.IsDBNull(dr["Nombre"])) oVenta.Usuario.Nombre = Convert.ToString(dr["Nombre"]);
                    if (!Convert.IsDBNull(dr["ApellidoPaterno"])) oVenta.Usuario.ApellidoPaterno = Convert.ToString(dr["ApellidoPaterno"]);
                    if (!Convert.IsDBNull(dr["NombreCliente"])) oVenta.Cliente.NombreCliente = Convert.ToString(dr["NombreCliente"]);
                    if (!Convert.IsDBNull(dr["Direccion"])) oVenta.Cliente.Direccion = Convert.ToString(dr["Direccion"]);
                    if (!Convert.IsDBNull(dr["RUC"])) oVenta.Cliente.RUC = Convert.ToString(dr["RUC"]);
                    if (!Convert.IsDBNull(dr["DNI"])) oVenta.Cliente.DNI = Convert.ToString(dr["DNI"]);

                    if (!Convert.IsDBNull(dr["NroPedido"])) oVenta.Pedido.NroPedido = Convert.ToInt32(dr["NroPedido"]);

                    if (!Convert.IsDBNull(dr["GuiaRemisionID"])) oVenta.GuiaRemision.GuiaRemisionID = Convert.ToInt32(dr["GuiaRemisionID"]);
                    if (!Convert.IsDBNull(dr["NroGuiaRemision"])) oVenta.GuiaRemision.NroGuiaRemision = Convert.ToInt32(dr["NroGuiaRemision"]);
                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return oVenta;
        }

        public List<DetalleVenta> getVentaDetallesByVentaID(int? ventaID)
        {
            DetalleVenta oDetalleVenta = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);
            List<DetalleVenta> listDetalleVenta = new List<DetalleVenta>();

            try
            {
                strCommand.Append("select dv.ProductoID, dv.VentaID, dv.Cantidad, dv.PrecioUnitario, dv.Descuento, p.CodigoProducto, p.Caracteristica, p.DescripcionProducto,   ");
                strCommand.Append("(isnull(dv.Cantidad,0) * isnull(dv.PrecioUnitario,0))  - isnull(dv.Descuento,0) as Importe  ");
                strCommand.Append("from DetalleVenta dv  ");
                strCommand.Append("inner join Producto p on dv.ProductoID = p.ProductoID ");
                strCommand.Append("WHERE dv.VentaID = @ventaID ");

                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.Text;

                sqlCommand.Parameters.AddWithValue("@ventaID", DbType.Int32).Value = ventaID;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                while (dr.Read())
                {
                    oDetalleVenta = new DetalleVenta();

                    if (!Convert.IsDBNull(dr["ProductoID"])) oDetalleVenta.ProductoID = Convert.ToInt32(dr["ProductoID"]);
                    if (!Convert.IsDBNull(dr["VentaID"])) oDetalleVenta.VentaID = Convert.ToInt32(dr["VentaID"]);
                    if (!Convert.IsDBNull(dr["Cantidad"])) oDetalleVenta.Cantidad = Convert.ToInt32(dr["Cantidad"]);
                    if (!Convert.IsDBNull(dr["PrecioUnitario"])) oDetalleVenta.PrecioUnitario = Convert.ToDecimal(dr["PrecioUnitario"]);
                    if (!Convert.IsDBNull(dr["Descuento"])) oDetalleVenta.Descuento = Convert.ToDecimal(dr["Descuento"]);
                    if (!Convert.IsDBNull(dr["Importe"])) oDetalleVenta.Importe = Convert.ToDecimal(dr["Importe"]);
                    if (!Convert.IsDBNull(dr["CodigoProducto"])) oDetalleVenta.CodigoProducto = Convert.ToString(dr["CodigoProducto"]);
                    if (!Convert.IsDBNull(dr["Caracteristica"])) oDetalleVenta.Caracteristica = Convert.ToString(dr["Caracteristica"]);
                    if (!Convert.IsDBNull(dr["DescripcionProducto"])) oDetalleVenta.DescripcionProducto = Convert.ToString(dr["DescripcionProducto"]);
                    listDetalleVenta.Add(oDetalleVenta);
                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return listDetalleVenta;
        }

        public Venta getVentaforGuiaRemision(string tipoVenta,string nroSerie,string nroVenta)
        {
            Venta oVenta = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);

            try
            {
                //strCommand.Append("SELECT v.VentaID,v.ClienteID,c.NombreCliente, c.Direccion, c.RUC ,c.DNI  FROM Venta v ");
                //strCommand.Append(" INNER JOIN Cliente c on c.ClienteID = v.ClienteID  ");

                strCommand.Append("select ve.VentaID,right('000000' + cast(ve.NroVenta as varchar(6)), 6) NroVentaDesc, Ped.PedidoID,Ped.NroPedido,right('000000' + cast(Ped.NroPedido as varchar(6)), 6) NroPedidoDesc,Ped.ClienteID,Cli.NombreCliente,Ped.FechaCreacion,Ped.ManejadoPor,ve.Estado,Ped.Observacion, ");
                strCommand.Append("Cli.DNI, Cli.RUC, Dir.Direccion,Cli.Telefono, Cli.VendedorID,Dpto.Departamento,Prv.Provincia,Dst.Distrito,ve.TipoVenta ");
                strCommand.Append("from dbo.Pedido Ped ") ;
                strCommand.Append("inner join dbo.Cliente Cli on Ped.ClienteID = Cli.ClienteID  ");
                strCommand.Append("inner join Venta ve on ve.PedidoID = ped.PedidoID  ");
                strCommand.Append("inner join Direccion Dir on (Cli.ClienteID=Dir.ClienteID and Dir.EsPrincipal=1) ");
                strCommand.Append("inner join Departamento Dpto on Dir.DepartamentoID=Dpto.DepartamentoID ");
                strCommand.Append("inner join Provincia Prv on Dir.ProvinciaID=Prv.ProvinciaID ");
                strCommand.Append("inner join Distrito Dst on Dir.DistritoID=Dst.DistritoID ");
                strCommand.Append(" WHERE (ve.TipoVenta=@tipoVenta and  ve.Serie=@nroSerie and ve.NroVenta=@nroVenta) ");

                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.Text;

                sqlCommand.Parameters.Add("@tipoVenta", SqlDbType.Char, 1).Value = tipoVenta;
                sqlCommand.Parameters.Add("@nroSerie", SqlDbType.VarChar, 50).Value = nroSerie;
                sqlCommand.Parameters.Add("@nroVenta", SqlDbType.VarChar, 50).Value = nroVenta;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                if (dr.Read())
                {
                    oVenta = new Venta();
                    oVenta.Pedido = new Pedido();
                    oVenta.Pedido.Cliente = new Cliente();

                    //if (!Convert.IsDBNull(dr["VentaID"])) oVenta.VentaID = Convert.ToInt32(dr["VentaID"]);
                    //if (!Convert.IsDBNull(dr["ClienteID"])) oVenta.ClienteID = Convert.ToInt32(dr["ClienteID"]);                   
                    //if (!Convert.IsDBNull(dr["NombreCliente"])) oVenta.Cliente.NombreCliente = Convert.ToString(dr["NombreCliente"]);
                    //if (!Convert.IsDBNull(dr["Direccion"])) oVenta.Cliente.Direccion = Convert.ToString(dr["Direccion"]);
                    //if (!Convert.IsDBNull(dr["RUC"])) oVenta.Cliente.RUC = Convert.ToString(dr["RUC"]);
                    //if (!Convert.IsDBNull(dr["DNI"])) oVenta.Cliente.DNI = Convert.ToString(dr["DNI"]);

                    if (!Convert.IsDBNull(dr["VentaID"])) oVenta.VentaID = Convert.ToInt32(dr["VentaID"]);
                    if (!Convert.IsDBNull(dr["NroVentaDesc"])) oVenta.NroVentaDesc = Convert.ToString(dr["NroVentaDesc"]);
                    if (!Convert.IsDBNull(dr["TipoVenta"])) oVenta.TipoVenta = Convert.ToString(dr["TipoVenta"]);
                    if (!Convert.IsDBNull(dr["PedidoID"])) oVenta.Pedido.PedidoID = Convert.ToInt32(dr["PedidoID"]);
                    if (!Convert.IsDBNull(dr["NroPedido"])) oVenta.Pedido.NroPedido = Convert.ToInt32(dr["NroPedido"]);
                    if (!Convert.IsDBNull(dr["NroPedidoDesc"])) oVenta.Pedido.NroPedidoDesc = Convert.ToString(dr["NroPedidoDesc"]);
                    if (!Convert.IsDBNull(dr["ClienteID"])) oVenta.Pedido.ClienteID = Convert.ToInt32(dr["ClienteID"]);
                    if (!Convert.IsDBNull(dr["NombreCliente"])) oVenta.Pedido.NombreCliente = Convert.ToString(dr["NombreCliente"]);
                    if (!Convert.IsDBNull(dr["FechaCreacion"])) oVenta.Pedido.FechaCreacion = Convert.ToDateTime(dr["FechaCreacion"]);
                    if (!Convert.IsDBNull(dr["ManejadoPor"])) oVenta.Pedido.ManejadoPor = Convert.ToString(dr["ManejadoPor"]);
                    if (!Convert.IsDBNull(dr["Estado"])) oVenta.Estado = Convert.ToInt32(dr["Estado"]);
                    if (!Convert.IsDBNull(dr["Observacion"])) oVenta.Pedido.Observacion = Convert.ToString(dr["Observacion"]);
                    if (!Convert.IsDBNull(dr["DNI"])) oVenta.Pedido.Cliente.DNI = Convert.ToString(dr["DNI"]);
                    if (!Convert.IsDBNull(dr["RUC"])) oVenta.Pedido.Cliente.RUC = Convert.ToString(dr["RUC"]);
                    if (!Convert.IsDBNull(dr["Direccion"])) oVenta.Pedido.Cliente.DireccionDesc = Convert.ToString(dr["Direccion"]);
                    if (!Convert.IsDBNull(dr["NombreCliente"])) oVenta.Pedido.Cliente.NombreCliente = Convert.ToString(dr["NombreCliente"]);
                    if (!Convert.IsDBNull(dr["Telefono"])) oVenta.Pedido.Cliente.Telefono = Convert.ToString(dr["Telefono"]);
                    if (!Convert.IsDBNull(dr["VendedorID"])) oVenta.Pedido.Cliente.VendedorID = Convert.ToInt32(dr["VendedorID"]);
                    if (!Convert.IsDBNull(dr["Departamento"])) oVenta.Pedido.Cliente.DepartamentoDesc = Convert.ToString(dr["Departamento"]);
                    if (!Convert.IsDBNull(dr["Provincia"])) oVenta.Pedido.Cliente.ProvinciaDesc = Convert.ToString(dr["Provincia"]);
                    if (!Convert.IsDBNull(dr["Distrito"])) oVenta.Pedido.Cliente.DistritoDesc = Convert.ToString(dr["Distrito"]);                 

                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return oVenta;
        }
    }
}
